package edu.whu;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class MyClass {

    @InitMethod
    public void init()
    {
        System.out.println("正在调用init方法");
    }

    @InitMethod
    public void initParams(int param)
    {
        System.out.println("正在调用有参数的initParams方法");
    }

    public void start()
    {
        System.out.println("正在调用start方法");
    }

    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        try {
            MyClass instance = myClass.myClassMethod("/myapp.properties", "bootstrapClass");
            Validator.checkInitMethod(myClass);
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }

    public MyClass myClassMethod(String propsSite, String key) throws FileNotFoundException,ClassNotFoundException,Exception
    {
        //获取资源文件
        Properties props = new Properties();
        try(InputStream input = MyClass.class.getResourceAsStream(propsSite))
        {
            if(input == null)
                return null;
            //将资源文件加载到Properties对象中
            props.load(input);

            //通过资源文件中的键值对建立MyClass实例
            Class myClass = Class.forName(props.getProperty(key));
            MyClass instance =(MyClass) myClass.newInstance();
            //调用含有InitMethod注解的方法
            /*结果为：
             * 正在调用init方法
             * 表示含有InitMethod注解的init()方法被调用，而不含有InitMethod注解的start()方法没有被调用
             * */
            return instance;
        }
    }
}
